#ifndef __GLOBALS__HPP__
#define __GLOBALS__HPP__
// Forward declarations to declare traits used in BinaryExpression for checking
// types.
struct Add;
struct Ceil;
struct Floor;
struct Min;
struct Max;

// Traits to filter out non-computation ops to avoid illegal expressions
// involving comparisons
template< typename T > 
struct is_computation_op { 
  static const bool value = false;
};
template<> struct is_computation_op < Add > {
  static const bool value = true; 
};
template<> struct is_computation_op < Ceil > {
  static const bool value = true; 
};
template<> struct is_computation_op < Floor > {
  static const bool value = true; 
};
template<> struct is_computation_op < Min > {
  static const bool value = true; 
};
template<> struct is_computation_op < Max > {
  static const bool value = true; 
};

// Global variables for printing and debugging purposes
static int expr_depth = -1;
static int bin_expr_depth = -1;
#endif //__GLOBALS__HPP__
